# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 导入用来做鼠标一系列操作的类 ActionChains
from selenium.webdriver.common.action_chains import ActionChains
# 引入模拟键盘一系列操作类 Keys
from selenium.webdriver.common.keys import Keys

# 实例化浏览器
driver = webdriver.Edge()

# 网址
# my_url = 'https://www.leafground.com/radio.xhtml;jsessionid=node018d7x5sspx43amapyllc2ulcm3312672.node0'
my_url = 'https://www.leafground.com/input.xhtml'

# 打开网页
driver.get(my_url)

# 窗口最大化
driver.maximize_window()

# 单选按钮的处理
# driver.find_element(By.XPATH, '//*[@id="j_idt87:console1"]/tbody/tr/td[4]/label').click()

# 滚动条拖动的处理
# 1、首先定位到进度条的滑块元素--返回出去给 slider --因为后续还要使用这个滑块元素进行操作
slider = driver.find_element(By.ID, 'j_idt106:j_idt120')
# 2、获取到滑块元素的大小(宽度)
# 返回的元素 slider 调用 size 方法--返回的 slider.size 是一个字典--再获取字典的宽度 slider.size['width'] 赋值给 slider_width
slider_width = slider.size['width']
# 3、计算要拖动的偏移量（例如：要拖动到一半的位置，五分之一等等）--使用上面获取到滑块的大小的五分之一 --再把结果给返回出去给offset（返回偏移量）
offset = slider_width / 5
# 4、使用 ActionChains 类 进行拖动--调用selenium里面一个类去做相应的一个拖动处理--引入 ActionChains 类
# 首先调用这个 ActionChains 类，然后类里面需要把 浏览器驱动实例(把driver对象) 给传进来后再返回出去给 action --（因为还需要用到它）
action = ActionChains(driver)
# click_and_hold：点击并保持住滑块元素，准备拖动；
# move_by_offset：通过指定的偏移量来移动滑块；
# release：释放鼠标，完成拖动操作；
# perform：执行以上定义的动作链；
action.click_and_hold(slider).move_by_offset(offset, 0).release().perform()

# 文本框实现自增或者自减操作
number_input = driver.find_element(By.ID, 'j_idt106:j_idt118_input')
# 清空输入框
number_input.clear()
# 手动输入新的值
number_input.send_keys('10')
# 使用文本框上的向上箭头模拟值自增
number_input.send_keys(Keys.ARROW_UP)
sleep(2)
# 使用文本框上的向下箭头模拟值自减
number_input.send_keys(Keys.ARROW_DOWN)

# 文本框弹出日期选择的处理
# 1、定位到文本框
date_input = driver.find_element(By.ID, 'j_idt106:j_idt116')
# 2、触发文本框的点击事件，弹出日期选择框
date_input.click()
# 3、定位到弹出的日期选择框里面的元素
date_element = driver.find_element(By.XPATH, '//*[@id="j_idt106:j_idt116_panel"]/div/div[2]/table/tbody/tr[5]/td[4]/a')
date_element.click()

# 页面截图
driver.save_screenshot('scr.png')

# 等待3秒
sleep(3)

# 关闭实例化浏览器
driver.quit()
